package grafica.vista;

import grafica.Forma;
import grafica.base.CerchioBase;
import grafica.base.RettangoloBase;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;



public class CerchioVista implements Forma {
	
	private CerchioBase cerchio;
	private boolean riempimento;
	private Color colore;
	
	
	/**
	 * @return the riempimento
	 */
	public boolean isRiempimento() {
		return riempimento;
	}
	/**
	 * @param riempimento the riempimento to set
	 */
	public void setRiempimento(boolean riempimento) {
		this.riempimento = riempimento;
	}
	/**
	 * @return the colore
	 */
	public Color getColore() {
		return colore;
	}
	/**
	 * @param colore the colore to set
	 */
	public void setColore(Color colore) {
		this.colore = colore;
	}
	/**
	 * @param cerchio
	 */
	public CerchioVista(CerchioBase cerchio) {
		super();
		this.cerchio = cerchio;
	}
	public CerchioVista(CerchioBase cerchio,Color colore) {
		super();
		this.cerchio = cerchio;
		this.colore=colore;
		
	}
	public void draw(Graphics oggetto) {
		if(riempimento){
			oggetto.drawOval((cerchio.getX()-cerchio.getRaggio())>>1, 
							 (cerchio.getY()-cerchio.getRaggio())>>1, 
							 cerchio.getRaggio(),
							 cerchio.getRaggio() );
		}else{
			Color colo=oggetto.getColor();
			oggetto.setColor(this.colore);
			oggetto.fillOval((cerchio.getX()-cerchio.getRaggio()/2), 
					 (cerchio.getY()-cerchio.getRaggio()/2), 
					 cerchio.getRaggio(),
					 cerchio.getRaggio() );
			oggetto.setColor(colo);
		}		
	}
	/**
	 * @return the cerchio
	 */
	public CerchioBase getCerchio() {
		return cerchio;
	}
	/**
	 * @param cerchio the cerchio to set
	 */
	public void setCerchio(CerchioBase cerchio) {
		this.cerchio = cerchio;
	}
	public boolean puntoAppartenenza(int x,int y){
		double valore=(double)((this.cerchio.getX()-x)*(this.cerchio.getX()-x)+(this.getCerchio().getY()-y)*(this.getCerchio().getY()-y));
		double distanza=Math.sqrt(valore);
		
		if(distanza<=(this.getCerchio().getRaggio()/2))
			return true;
		return false;
	}

	public boolean intersezioneRettangolo(RettangoloBase istanza) {
		Area are=new Area(new Ellipse2D.Double(cerchio.getX()-cerchio.getRaggio()/2, 
				   cerchio.getY()-cerchio.getRaggio()/2, 
				   cerchio.getRaggio(),
				   cerchio.getRaggio()));
		if(are.intersects(istanza.getX(), istanza.getY(), istanza.getBase(), istanza.getAltezza()))
			return true;
		return false;
	}
	@Override
	public Object clone() throws CloneNotSupportedException {
		CerchioVista copia=(CerchioVista)super.clone();
		copia.setCerchio(new CerchioBase(this.getCerchio().getX(), this.getCerchio().getY(), this.getCerchio().getRaggio()));
		return copia;
	}
}
